package com.sunny.springboot2.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 日期处理
 * @author sunny
 * @date 2018/11/30
 */
public class DateUtils {
    public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
    public static final DateTimeFormatter YYYY_MM_DD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 获取当前日期
     * 格式：yyyy年MM月dd日
     * @param plusDays 正数表示 加 几天，负数表示 减 几天
     * @return
     */
    public static String now(Integer plusDays) {
        return LocalDate.now().plusDays(plusDays).format(FORMATTER);
    }

    /**
     * 获取当前日期
     * 格式：yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static String YYYY_MM_DD_HH_MM_SS() {
        return LocalDateTime.now().format(YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 获取当前日期
     * 格式：yyyy-MM-dd
     * @param plusDays 正数表示 加 几天，负数表示 减 几天
     * @return
     */
    public static String YYYY_MM_DD(Integer plusDays) {
        return LocalDate.now().plusDays(plusDays).format(YYYY_MM_DD);
    }

    /**
     * 为strDateTime增加 minutes 分钟
     *
     * @param strDateTime 时间
     * @param minutes 要增加的分钟数
     * @author sunny
     * @date 2018/11/16
     * @return java.util.Date
     */
    public static Date addMinutes(String strDateTime, long minutes) {
        LocalDateTime localDateTime = LocalDateTime.parse(strDateTime, YYYY_MM_DD_HH_MM_SS);
        localDateTime = localDateTime.plusMinutes(minutes);
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 获取当前日期
     * 格式：yyyy-MM-dd
     * @return
     */
    public static String YYYY_MM_DD() {
        return LocalDate.now().format(YYYY_MM_DD);
    }

    /**
     * 获取当前日期
     * @return java.util.Date
     */
    public static Date currentDate() {
        return Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
}
